package com.lxhotel.agentmcp.domain;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用返回对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class $R<T> {
    private String code;
    private String msg;
    private T data;

    protected $R(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    protected $R(String code) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     */
    public static <T> $R<T> success(T data) {
        return new $R<T>("200", "success", data);
    }

    /**
     * 成功返回结果
     */
    public static <T> $R<T> success() {
        return new $R<T>("200", "success", null);
    }

    /**
     * 成功返回结果
     *
     * @param data    获取的数据
     * @param message 提示信息
     */
    public static <T> $R<T> success(T data, String message) {
        return new $R<T>("200", message, data);
    }

    /**
     * 成功返回结果
     *
     * @param data    获取的数据
     * @param message 提示信息
     */
    public static <T> $R<T> success(String code, String message, T data) {
        return new $R<T>(code, message, data);
    }

    /**
     * 失败返回结果
     *
     * @param message 提示信息
     */
    public static <T> $R<T> failed(String message) {
        return new $R<T>("500", message, null);
    }

    /**
     * 失败返回没有库存的结果
     *
     * @param message 提示信息
     */
    public static <T> $R<T> failed(String message, T date) {
        return new $R<T>("500", message, date);
    }


    /**
     * 异常返回
     */
    public static <T> $R<T> error(String message) {
        return new $R<T>("500", message, null);
    }

    /**
     * 自定义异常返回
     */
    public static <T> $R<T> error(String code, String message) {
        return new $R<T>(code, message, null);
    }

}
